Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


nomadnet/ui/textui/Network.py a53bd70dc9ecf0d2adc832febe8cd8452125d1bc (a53bd70d) Text, 17.58 KB

Tff7b72import T7ee787RNS
Tff7b72import T7ee787urwid
Tff7b72import T7ee787nomadnet
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime
Tff7b72from T7ee787nomadnetT7ee787.T7ee787Directory Tff7b72import Te6edf3DirectoryEntry
Tff7b72from T7ee787nomadnetT7ee787.T7ee787vendorT7ee787.T7ee787additional_urwid_widgets Tff7b72import Te6edf3IndicativeListBoxTb4b4b4, Te6edf3MODIFIER_KEY

Tff7b72class T56d364NetworkDisplayShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app

Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffNetwork Display ShortcutsTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffshortcutbarTa5d6ff"Tb4b4b4)


Tff7b72class T56d364DialogLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffescTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffupdate_conversation_listTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3DialogLineBoxTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)


Tff7b72class T56d364ListEntryTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4)Tb4b4b4:
Te6edf3_selectable Tff7b72= Tff7b72True

Te6edf3signals Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4]

Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
T8b949e"""
Send 'click' signal on 'activate' command.
"""
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_command_mapTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72!= Te6edf3urwidTff7b72.Td2a8ffACTIVATETb4b4b4:
Tff7b72return Te6edf3key

Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff'Ta5d6ffclickTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
T8b949e"""
Send 'click' signal on button 1 press.
"""
Tff7b72if Te6edf3button Tff7b72!= T79c0ff1 Tff7b72or Tff7b72not Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False

Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff'Ta5d6ffclickTa5d6ff'Tb4b4b4)
Tff7b72return Tff7b72True

Tff7b72class T56d364AnnounceStreamEntryTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3timestampTb4b4b4, Te6edf3source_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8fftimestamp Tff7b72= Te6edf3timestamp
Te6edf3time_format Tff7b72= Te6edf3appTff7b72.Td2a8fftime_format
Te6edf3dt Tff7b72= Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Tff7b72selfTff7b72.Td2a8fftimestampTb4b4b4)
Te6edf3ts_string Tff7b72= Te6edf3dtTff7b72.Td2a8ffstrftimeTb4b4b4(Te6edf3time_formatTb4b4b4)

Te6edf3trust_level Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8fftrust_levelTb4b4b4(Te6edf3source_hashTb4b4b4)
Te6edf3display_str Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffsimplest_display_strTb4b4b4(Te6edf3source_hashTb4b4b4)

Tff7b72if Te6edf3trust_level Tff7b72== Te6edf3DirectoryEntryTff7b72.Td2a8ffUNTRUSTEDTb4b4b4:
Te6edf3symbol Tff7b72= Ta5d6ff"Tffea00\u2715Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_untrustedTa5d6ff"
Te6edf3focus_style Tff7b72= Ta5d6ff"Ta5d6fflist_focus_untrustedTa5d6ff"
Tff7b72elif Te6edf3trust_level Tff7b72== Te6edf3DirectoryEntryTff7b72.Td2a8ffUNKNOWNTb4b4b4:
Te6edf3symbol Tff7b72= Ta5d6ff"Ta5d6ff?Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_unknownTa5d6ff"
Te6edf3focus_style Tff7b72= Ta5d6ff"Ta5d6fflist_focusTa5d6ff"
Tff7b72elif Te6edf3trust_level Tff7b72== Te6edf3DirectoryEntryTff7b72.Td2a8ffTRUSTEDTb4b4b4:
Te6edf3symbol Tff7b72= Ta5d6ff"Tffea00\u2713Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_trustedTa5d6ff"
Te6edf3focus_style Tff7b72= Ta5d6ff"Ta5d6fflist_focus_trustedTa5d6ff"
Tff7b72elif Te6edf3trust_level Tff7b72== Te6edf3DirectoryEntryTff7b72.Td2a8ffWARNINGTb4b4b4:
Te6edf3symbol Tff7b72= Ta5d6ff"Tffea00\u26A0Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_warningTa5d6ff"
Te6edf3focus_style Tff7b72= Ta5d6ff"Ta5d6fflist_focusTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3symbol Tff7b72= Ta5d6ff"Tffea00\u26A0Ta5d6ff"
Te6edf3style Tff7b72= Ta5d6ff"Ta5d6fflist_untrustedTa5d6ff"
Te6edf3focus_style Tff7b72= Ta5d6ff"Ta5d6fflist_focus_untrustedTa5d6ff"

Te6edf3widget Tff7b72= Te6edf3ListEntryTb4b4b4(Te6edf3ts_stringTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3display_strTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3styleTb4b4b4, Te6edf3focus_styleTb4b4b4)
Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4)

Tff7b72class T56d364AnnounceStreamTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3parentTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffparent Tff7b72= Te6edf3parent
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffanimation_intervalTa5d6ff"Tb4b4b4]Tff7b72*T79c0ff2
Tff7b72selfTff7b72.Td2a8ffilb Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffadded_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffwidget_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffupdate_widget_listTb4b4b4(Tb4b4b4)

Te6edf3wlt Tff7b72= Tb4b4b4[Te6edf3AnnounceStreamEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72for Te6edf3e Tff7b72in Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffannounce_streamTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffilb Tff7b72= Te6edf3IndicativeListBoxTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffwidget_listTb4b4b4,
T8b949e#wlt,
Te6edf3on_selection_changeTff7b72=Tff7b72selfTff7b72.Td2a8fflist_selectionTb4b4b4,
Te6edf3initialization_is_selection_changeTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3modifier_keyTff7b72=Te6edf3MODIFIER_KEYTff7b72.Td2a8ffCTRLTb4b4b4,
T8b949e#highlight_offFocus="list_off_focus"
Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffilb
Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffAnnounce StreamTa5d6ff"Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffrebuild_widget_listTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffadded_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffwidget_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffupdate_widget_listTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdate_widget_listTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3new_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3e Tff7b72in Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffannounce_streamTb4b4b4:
Tff7b72if Tff7b72not Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffadded_entriesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffadded_entriesTff7b72.Td2a8ffinsertTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3new_entriesTff7b72.Td2a8ffinsertTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3eTb4b4b4)

Te6edf3new_widgets Tff7b72= Tb4b4b4[Te6edf3AnnounceStreamEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72for Te6edf3e Tff7b72in Te6edf3new_entriesTb4b4b4]
Tff7b72for Te6edf3nw Tff7b72in Te6edf3new_widgetsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_listTff7b72.Td2a8ffinsertTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3nwTb4b4b4)

Tff7b72if Tffa657lenTb4b4b4(Te6edf3new_widgetsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInserted Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657lenTb4b4b4(Te6edf3new_widgetsTb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff widgetsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffilb Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffilbTff7b72.Td2a8ffset_bodyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffwidget_listTb4b4b4)

Tff7b72def Td2a8fflist_selectionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arg1Tb4b4b4, Te6edf3arg2Tb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_widget_listTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdate_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3loopTff7b72=Tff7b72NoneTb4b4b4, Te6edf3user_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstartedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4, Tff7b72selfTff7b72.Td2a8ffupdate_callbackTb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3was_started Tff7b72= Tff7b72selfTff7b72.Td2a8ffstarted
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3was_startedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_callbackTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False

Tff7b72class T56d364SelectTextTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4)Tb4b4b4:
Te6edf3_selectable Tff7b72= Tff7b72True

Te6edf3signals Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffclickTa5d6ff"Tb4b4b4]

Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
T8b949e"""
Send 'click' signal on 'activate' command.
"""
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_command_mapTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72!= Te6edf3urwidTff7b72.Td2a8ffACTIVATETb4b4b4:
Tff7b72return Te6edf3key

Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff'Ta5d6ffclickTa5d6ff'Tb4b4b4)

Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
T8b949e"""
Send 'click' signal on button 1 press.
"""
Tff7b72if Te6edf3button Tff7b72!= T79c0ff1 Tff7b72or Tff7b72not Te6edf3urwidTff7b72.Td2a8ffutilTff7b72.Td2a8ffis_mouse_pressTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False

Tff7b72selfTff7b72.Td2a8ff_emitTb4b4b4(Ta5d6ff'Ta5d6ffclickTa5d6ff'Tb4b4b4)
Tff7b72return Tff7b72True

Tff7b72class T56d364KnownNodesTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffnode_list Tff7b72= Te6edf3appTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffknown_nodesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffilb Tff7b72= Te6edf3IndicativeListBoxTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffmake_node_widgetsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3on_selection_changeTff7b72=Tff7b72selfTff7b72.Td2a8ffnode_list_selectionTb4b4b4,
Te6edf3initialization_is_selection_changeTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3highlight_offFocusTff7b72=Ta5d6ff"Ta5d6fflist_off_focusTa5d6ff"
Tb4b4b4)

Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnode_listTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffilb
Te6edf3widget_style Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffno_content Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffno_content Tff7b72= Tff7b72True
Te6edf3widget_style Tff7b72= Ta5d6ff"Ta5d6ffinactive_textTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ffwarning_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff- Tffea00\u2139Ta5d6ff -Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3SelectTextTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ffwarning_textTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCurrently, no nodes are knownTffea00\nTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4]Tb4b4b4)

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffKnown NodesTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3widget_styleTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff" Tff7b72and Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffno_content Tff7b72or Tff7b72selfTff7b72.Td2a8ffilbTff7b72.Td2a8fftop_is_visibleTb4b4b4)Tb4b4b4:
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffframeTff7b72.Td2a8ffset_focusTb4b4b4(Ta5d6ff"Ta5d6ffheaderTa5d6ff"Tb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Te6edf3KnownNodesTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)


Tff7b72def Td2a8ffnode_list_selectionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arg1Tb4b4b4, Te6edf3arg2Tb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffmake_node_widgetsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3widget_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3node_entry Tff7b72in Tff7b72selfTff7b72.Td2a8ffnode_listTb4b4b4:
T8b949e# TODO: Implement this
Te6edf3widget_listTff7b72.Td2a8ffappendTb4b4b4(Te6edf3ListEntryTb4b4b4(Ta5d6ff"Ta5d6ffNode Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3node_entryTff7b72.Td2a8ffsource_hashTb4b4b4)Tb4b4b4)Tb4b4b4)

T8b949e# TODO: Sort list
Tff7b72return Te6edf3widget_list


Tff7b72class T56d364AnnounceTimeTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffanimation_intervalTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_timeTb4b4b4(Tb4b4b4)

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4)

Tff7b72def Td2a8ffupdate_timeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_announce_string Tff7b72= Ta5d6ff"Ta5d6ffNeverTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffpeer_settingsTb4b4b4[Ta5d6ff"Ta5d6fflast_announceTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_announce_string Tff7b72= Te6edf3pretty_dateTb4b4b4(Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffpeer_settingsTb4b4b4[Ta5d6ff"Ta5d6fflast_announceTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_textTb4b4b4(Ta5d6ff"Ta5d6ffLast Announce : Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8fflast_announce_stringTb4b4b4)

Tff7b72def Td2a8ffupdate_time_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3loopTff7b72=Tff7b72NoneTb4b4b4, Te6edf3user_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_timeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstartedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4, Tff7b72selfTff7b72.Td2a8ffupdate_time_callbackTb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3was_started Tff7b72= Tff7b72selfTff7b72.Td2a8ffstarted
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3was_startedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_time_callbackTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False


Tff7b72class T56d364LocalPeerTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Te6edf3announce_timer Tff7b72= Tff7b72None

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3parentTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffparent Tff7b72= Te6edf3parent
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Te6edf3display_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffdisplay_name
Tff7b72if Te6edf3display_name Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3display_name Tff7b72= Ta5d6ff"Ta5d6ff"

Te6edf3t_id Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffAddr : Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4)
Te6edf3e_name Tff7b72= Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffName : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Te6edf3display_nameTb4b4b4)

Tff7b72def Td2a8ffsave_queryTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3LocalPeerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTff7b72.Td2a8ffparentTb4b4b4)Tb4b4b4, Te6edf3optionsTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffset_display_nameTb4b4b4(Te6edf3e_nameTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tb4b4b4)

Te6edf3dialog Tff7b72= Te6edf3DialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ffSavedTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Tffea00\u2139Ta5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72self

Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(Te6edf3dialogTb4b4b4, Te6edf3bottomTb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Te6edf3widthTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffrelativeTa5d6ff"Tb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4, Te6edf3valignTff7b72=Ta5d6ff"Ta5d6ffmiddleTa5d6ff"Tb4b4b4, Te6edf3heightTff7b72=Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Te6edf3leftTff7b72=T79c0ff4Tb4b4b4, Te6edf3rightTff7b72=T79c0ff4Tb4b4b4)
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)

Tff7b72def Td2a8ffannounce_queryTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3height_typeTff7b72=Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Te6edf3height_amountTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3LocalPeerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTff7b72.Td2a8ffparentTb4b4b4)Tb4b4b4, Te6edf3optionsTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffannounce_nowTb4b4b4(Tb4b4b4)

Te6edf3dialog Tff7b72= Te6edf3DialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Tffea00\nTffea00\nTffea00\nTa5d6ffAnnounce SentTffea00\nTffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Tffea00\u2139Ta5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72self

T8b949e#overlay = urwid.Overlay(dialog, bottom, align="center", width=("relative", 100), valign="middle", height="pack", left=4, right=4)
Te6edf3overlay Tff7b72= Te6edf3dialog
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72True
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3height_typeTff7b72=Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Te6edf3height_amountTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)

Tff7b72def Td2a8ffnode_settings_queryTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3height_typeTff7b72=Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Te6edf3height_amountTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffnode_settings_displayTb4b4b4, Te6edf3optionsTb4b4b4)

Tff7b72if Te6edf3LocalPeerTff7b72.Td2a8ffannounce_timer Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fft_last_announce Tff7b72= Te6edf3AnnounceTimeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Te6edf3LocalPeerTff7b72.Td2a8ffannounce_timer Tff7b72= Tff7b72selfTff7b72.Td2a8fft_last_announce
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fft_last_announce Tff7b72= Te6edf3LocalPeerTff7b72.Td2a8ffannounce_timer
Tff7b72selfTff7b72.Td2a8fft_last_announceTff7b72.Td2a8ffupdate_timeTb4b4b4(Tb4b4b4)

Te6edf3announce_button Tff7b72= Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffAnnounce NowTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3announce_queryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(
Tb4b4b4[
Te6edf3t_idTb4b4b4,
Te6edf3e_nameTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Ta5d6ff"Tffea00\u2504Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8fft_last_announceTb4b4b4,
Te6edf3announce_buttonTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Ta5d6ff"Tffea00\u2504Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffSaveTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3save_queryTb4b4b4)Tb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffNode SettingsTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3node_settings_queryTb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4)
Tb4b4b4]
Tb4b4b4)

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffLocal Peer InfoTa5d6ff"Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fft_last_announceTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)


Tff7b72class T56d364NodeSettingsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3parentTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffparent Tff7b72= Te6edf3parent

Tff7b72def Td2a8ffshow_peer_infoTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3height_typeTff7b72=Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Te6edf3height_amountTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffleft_pileTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3LocalPeerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTff7b72.Td2a8ffparentTb4b4b4)Tb4b4b4, Te6edf3optionsTb4b4b4)

Te6edf3widget_style Tff7b72= Ta5d6ff"Ta5d6ffinactive_textTa5d6ff"
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff- Tffea00\u2139Ta5d6ff -Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ffNode Hosting currently unavailableTffea00\nTffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffPaddingTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3show_peer_infoTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4)
Tb4b4b4]Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3pile

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffNode SettingsTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3widget_styleTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffnode_list_selectionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arg1Tb4b4b4, Te6edf3arg2Tb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffmake_node_widgetsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3widget_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3node_entry Tff7b72in Tff7b72selfTff7b72.Td2a8ffnode_listTb4b4b4:
T8b949e# TODO: Implement this
Te6edf3widget_listTff7b72.Td2a8ffappendTb4b4b4(Te6edf3ListEntryTb4b4b4(Ta5d6ff"Ta5d6ffNode Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3node_entryTff7b72.Td2a8ffsource_hashTb4b4b4)Tb4b4b4)Tb4b4b4)

T8b949e# TODO: Sort list
Tff7b72return Te6edf3widget_list


Tff7b72class T56d364UpdatingTextTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3value_methodTb4b4b4, Te6edf3append_textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffanimation_intervalTa5d6ff"Tb4b4b4]Tff7b72*T79c0ff5
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffvalue Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffvalue_method Tff7b72= Te6edf3value_method
Tff7b72selfTff7b72.Td2a8fftitle Tff7b72= Te6edf3title
Tff7b72selfTff7b72.Td2a8ffappend_text Tff7b72= Te6edf3append_text
Tff7b72selfTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4)

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvalue Tff7b72= Tff7b72selfTff7b72.Td2a8ffvalue_methodTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_textTb4b4b4(Tff7b72selfTff7b72.Td2a8fftitleTff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvalueTb4b4b4)Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappend_textTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffupdate_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3loopTff7b72=Tff7b72NoneTb4b4b4, Te6edf3user_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstartedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4, Tff7b72selfTff7b72.Td2a8ffupdate_callbackTb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3was_started Tff7b72= Tff7b72selfTff7b72.Td2a8ffstarted
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3was_startedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_callbackTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Tff7b72False

Tff7b72class T56d364NetworkStatsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3parentTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffparent Tff7b72= Te6edf3parent

Tff7b72def Td2a8ffget_num_peersTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffnumber_of_known_peersTb4b4b4(Te6edf3lookback_secondsTff7b72=T79c0ff30Tff7b72*T79c0ff60Tb4b4b4)


Tff7b72def Td2a8ffget_num_nodesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffnumber_of_known_nodesTb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffw_heard_peers Tff7b72= Te6edf3UpdatingTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffHeard Peers: Ta5d6ff"Tb4b4b4, Te6edf3get_num_peersTb4b4b4, Te6edf3append_textTff7b72=Ta5d6ff"Ta5d6ff (last 30m)Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffw_known_nodes Tff7b72= Te6edf3UpdatingTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffKnown Nodes: Ta5d6ff"Tb4b4b4, Te6edf3get_num_nodesTb4b4b4)

Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Tff7b72selfTff7b72.Td2a8ffw_heard_peersTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffw_known_nodesTb4b4b4,
Tb4b4b4]Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Te6edf3pileTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffNetwork StatsTa5d6ff"Tb4b4b4)

Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffw_heard_peersTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffw_known_nodesTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72class T56d364NetworkDisplayTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3list_width Tff7b72= T79c0ff0.33

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app

Tff7b72selfTff7b72.Td2a8ffknown_nodes_display Tff7b72= Te6edf3KnownNodesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffnetwork_stats_display Tff7b72= Te6edf3NetworkStatsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_stream_display Tff7b72= Te6edf3AnnounceStreamTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflocal_peer_display Tff7b72= Te6edf3LocalPeerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffnode_settings_display Tff7b72= Te6edf3NodeSettingsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Tff7b72selfTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffleft_pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffknown_nodes_displayTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffannounce_stream_displayTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffnetwork_stats_displayTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpackTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8fflocal_peer_displayTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffleft_area Tff7b72= Tff7b72selfTff7b72.Td2a8ffleft_pile
Tff7b72selfTff7b72.Td2a8ffright_area Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffDisconnectedTffea00\nTffea00\u2190Ta5d6ff Tffea00\u2192Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffmiddleTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffRemote NodeTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffinactive_textTa5d6ff"Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffcolumns Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(
Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, Te6edf3NetworkDisplayTff7b72.Td2a8fflist_widthTb4b4b4, Tff7b72selfTff7b72.Td2a8ffleft_areaTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffweightTa5d6ff"Tb4b4b4, T79c0ff1Tff7b72-Te6edf3NetworkDisplayTff7b72.Td2a8fflist_widthTb4b4b4, Tff7b72selfTff7b72.Td2a8ffright_areaTb4b4b4)
Tb4b4b4]Tb4b4b4,
Te6edf3dividecharsTff7b72=T79c0ff0Tb4b4b4, Te6edf3focus_columnTff7b72=T79c0ff0
Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffshortcuts_display Tff7b72= Te6edf3NetworkDisplayShortcutsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcolumns

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflocal_peer_displayTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffnetwork_stats_displayTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_stream_displayTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffshortcutsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffshortcuts_display

Tff7b72def Td2a8ffdirectory_change_callbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffannounce_stream_displayTff7b72.Td2a8ffrebuild_widget_listTb4b4b4(Tb4b4b4)



Tff7b72def Td2a8ffpretty_dateTb4b4b4(Te6edf3timeTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e"""
Get a datetime object or a int() Epoch timestamp and return a
pretty string like 'an hour ago', 'Yesterday', '3 months ago',
'just now', etc
"""
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime
Te6edf3now Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657typeTb4b4b4(Te6edf3timeTb4b4b4) Tff7b72is Tffa657intTb4b4b4:
Te6edf3diff Tff7b72= Te6edf3now Tff7b72- Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3timeTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3timeTb4b4b4,Te6edf3datetimeTb4b4b4)Tb4b4b4:
Te6edf3diff Tff7b72= Te6edf3now Tff7b72- Te6edf3time
Tff7b72elif Tff7b72not Te6edf3timeTb4b4b4:
Te6edf3diff Tff7b72= Te6edf3now Tff7b72- Te6edf3now
Te6edf3second_diff Tff7b72= Te6edf3diffTff7b72.Td2a8ffseconds
Te6edf3day_diff Tff7b72= Te6edf3diffTff7b72.Td2a8ffdays

Tff7b72if Te6edf3day_diff Tff7b72< T79c0ff0Tb4b4b4:
Tff7b72return Ta5d6ff'Ta5d6ff'

Tff7b72if Te6edf3day_diff Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff10Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffjust nowTa5d6ff"
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff60Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3second_diffTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff seconds agoTa5d6ff"
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff120Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffa minute agoTa5d6ff"
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff3600Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3second_diff Tff7b72/ T79c0ff60Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff minutes agoTa5d6ff"
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff7200Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffan hour agoTa5d6ff"
Tff7b72if Te6edf3second_diff Tff7b72< T79c0ff86400Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3second_diff Tff7b72/ T79c0ff3600Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff hours agoTa5d6ff"
Tff7b72if Te6edf3day_diff Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffYesterdayTa5d6ff"
Tff7b72if Te6edf3day_diff Tff7b72< T79c0ff7Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3day_diffTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff days agoTa5d6ff"
Tff7b72if Te6edf3day_diff Tff7b72< T79c0ff31Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3day_diff Tff7b72/ T79c0ff7Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff weeks agoTa5d6ff"
Tff7b72if Te6edf3day_diff Tff7b72< T79c0ff365Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3day_diff Tff7b72/ T79c0ff30Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff months agoTa5d6ff"
Tff7b72return Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3day_diff Tff7b72/ T79c0ff365Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff years agoTa5d6ff"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────